const { UserModel } = require('../../models/index')
// 提交用户个人信息
const submitUserInfoData = async (req, res) => {
  try {
    // 获取得到的用户个人信息数据
    const userInfoData = req.body

    if (!userInfoData) {
      return res.status(400).json({
        error: '用户个人信息不能为空'
      })
    }

    // 处理用户个人信息数据
    const formatUserInfo = {
      name: userInfoData.name,
      username: userInfoData.username,
      avatar: userInfoData.avatar,
      email: userInfoData.email
    }

    // 查找用户记录
    const userRecord = await UserModel.findOne({
      where: {
        user_id: userInfoData.user_id
      }
    })

    // 查找用户失败的情况
    if (!userRecord) {
      return res.status(404).json({
        error: '未找到用户记录，请重新注册登录'
      })
    }

    // 提交用户个人信息
    await userRecord.update({ ...formatUserInfo })

    // 返回提交成功的响应
    res.status(200).json({
      title: '提交用户个人信息成功'
    })
  } catch (error) {
    res.status(500).json({
      error: error.message
    })
  }
}

// 获取用户个人信息
const getUserInfoData = async (req, res) => {
  try {
    // 获取用户ID
    const userID = req.params.id

    if (!userID) {
      return res.status(400).json({
        error: '用户ID不能为空'
      })
    }

    // 查找用户个人信息
    const userInfoData = await UserModel.findByPk(userID)

    // 查找用户失败的情况
    if (!userInfoData) {
      return res.status(404).json({
        error: '未找到用户，请重新注册登录'
      })
    }

    // 返回提交成功的响应
    res.status(200).json({
      title: '用户个人信息',
      data: userInfoData
    })
  } catch (error) {
    res.status(500).json({
      error: error.message
    })
  }
}

// 查询当前用户的账户余额
const checkUserMoney = async (req, res) => {
  try {
    // 获取用户ID
    const userID = req.params.id

    if (!userID) {
      return res.status(400).json({
        error: '用户ID不能为空'
      })
    }

    // 查找用户账户余额
    const userMoneyData = await UserModel.findOne({
      where: {
        user_id: userID,
      },
      attributes: ['user_id', 'money']
    })

    // 查找用户失败的情况
    if (!userMoneyData) {
      return res.status(404).json({
        error: '未找到用户，请重新注册登录'
      })
    }

    // 返回提交成功的响应
    res.status(200).json({
      title: '用户账户余额',
      data: userMoneyData
    })
  } catch (error) {
    res.status(500).json({
      error: error.message
    })
  }
}

// 用户账户余额充值
const rechargeUserMoney = async (req, res) => {
  try {
    // 获取用户ID
    const userID = req.params.id;

    if (!userID) {
      return res.status(400).json({ error: '用户ID不能为空' });
    }

    // 获取用户充值金额
    const { amount } = req.body;
    const rechargeMoney = parseFloat(amount);

    if (isNaN(rechargeMoney) || rechargeMoney <= 0) {
      return res.status(400).json({ error: '充值金额必须是大于0的数字' });
    }

    // 查找用户账户
    const userMoneyData = await UserModel.findByPk(userID)

    if (!userMoneyData) {
      return res.status(404).json({ error: '未找到用户，请重新注册登录' });
    }

    // 计算新的账户余额
    const newBalance = parseFloat(userMoneyData.money) + rechargeMoney;

    // 更新用户余额
    await UserModel.update({ money: newBalance }, { where: { user_id: userID } });

    // 返回成功响应
    res.status(200).json({
      message: '充值成功',
      data: { user_id: userID, new_balance: newBalance }
    });
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
}

module.exports = {
  submitUserInfoData,
  getUserInfoData,
  checkUserMoney,
  rechargeUserMoney
}